//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS CodeCatalyst service.
///
/// Welcome to the Amazon CodeCatalyst API reference. This reference provides descriptions of operations and data types for Amazon CodeCatalyst. You can use the Amazon CodeCatalyst  API to work with the following objects.  Spaces, by calling the following:    DeleteSpace, which deletes a space.    GetSpace, which returns information about a space.    GetSubscription, which returns information about the Amazon Web Services account used for billing purposes  and the billing plan for the space.    ListSpaces, which retrieves a list of spaces.    UpdateSpace, which changes one or more values for a space.   Projects, by calling the following:    CreateProject which creates a project in a specified space.    GetProject, which returns information about a project.    ListProjects, which retrieves a list of projects in a space.   Users, by calling the following:    GetUserDetails, which returns information about a user in Amazon CodeCatalyst.   Source repositories, by calling the following:    CreateSourceRepository, which creates an empty Git-based source repository in a specified project.    CreateSourceRepositoryBranch, which creates a branch in a specified repository where you can work on code.    DeleteSourceRepository, which deletes a source repository.    GetSourceRepository, which returns information about a source repository.    GetSourceRepositoryCloneUrls, which returns information about the URLs that can be used with a Git client to clone a source repository.    ListSourceRepositories, which retrieves a list of source repositories in a project.    ListSourceRepositoryBranches, which retrieves a list of branches in a source repository.   Dev Environments and the Amazon Web Services Toolkits, by calling the following:    CreateDevEnvironment, which creates a Dev Environment,  where you can quickly work on the code stored in the source repositories of your project.    DeleteDevEnvironment, which deletes a Dev Environment.    GetDevEnvironment, which returns information about a Dev Environment.    ListDevEnvironments, which retrieves a list of Dev Environments in a project.    ListDevEnvironmentSessions, which retrieves a list of active Dev Environment sessions in a project.    StartDevEnvironment, which starts a specified Dev Environment and puts it into an active state.    StartDevEnvironmentSession, which starts a session to a specified Dev Environment.    StopDevEnvironment, which stops a specified Dev Environment and puts it into an stopped state.    StopDevEnvironmentSession, which stops a session for a specified Dev Environment.    UpdateDevEnvironment, which changes one or more values for a Dev Environment.   Workflows, by calling the following:    GetWorkflow, which returns information about a workflow.    GetWorkflowRun, which returns information about a specified run of a workflow.    ListWorkflowRuns, which retrieves a list of runs of a specified workflow.    ListWorkflows, which retrieves a list of workflows in a specified project.    StartWorkflowRun, which starts a run of a specified workflow.   Security, activity, and resource management in Amazon CodeCatalyst, by calling the following:    CreateAccessToken, which creates a personal access token (PAT) for the current user.    DeleteAccessToken, which deletes a specified personal access token (PAT).    ListAccessTokens, which lists all personal access tokens (PATs) associated with a user.    ListEventLogs, which retrieves a list of events that occurred during a specified time period in a space.    VerifySession, which verifies whether the calling user has a valid Amazon CodeCatalyst login and session.    If you are using the Amazon CodeCatalyst APIs with an SDK or the CLI, you must configure your computer to work with Amazon CodeCatalyst and single sign-on (SSO). For more information, see Setting up to use the CLI with Amazon CodeCatalyst and the SSO documentation for your SDK.
public struct CodeCatalyst: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the CodeCatalyst client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: nil,
            partition: partition,
            serviceName: "CodeCatalyst",
            serviceIdentifier: "codecatalyst",
            serviceProtocol: .restjson,
            apiVersion: "2022-09-28",
            endpoint: endpoint,
            serviceEndpoints: Self.serviceEndpoints,
            errorType: CodeCatalystErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }


    /// custom endpoints for regions
    static var serviceEndpoints: [String: String] {[
        "aws-global": "codecatalyst.global.api.aws"
    ]}



    // MARK: API Calls

    /// Creates a personal access token (PAT) for the current user. A personal access token (PAT) is similar to a password.  It is associated with your user identity for use across all spaces and projects in Amazon CodeCatalyst. You use PATs to access CodeCatalyst  from resources that include integrated development environments (IDEs) and Git-based source repositories.   PATs represent you in Amazon CodeCatalyst and you can manage them in your user settings.For more information, see  Managing personal access tokens in Amazon CodeCatalyst.
    @Sendable
    @inlinable
    public func createAccessToken(_ input: CreateAccessTokenRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateAccessTokenResponse {
        try await self.client.execute(
            operation: "CreateAccessToken", 
            path: "/v1/accessTokens", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a personal access token (PAT) for the current user. A personal access token (PAT) is similar to a password.  It is associated with your user identity for use across all spaces and projects in Amazon CodeCatalyst. You use PATs to access CodeCatalyst  from resources that include integrated development environments (IDEs) and Git-based source repositories.   PATs represent you in Amazon CodeCatalyst and you can manage them in your user settings.For more information, see  Managing personal access tokens in Amazon CodeCatalyst.
    ///
    /// Parameters:
    ///   - expiresTime: The date and time the personal access token expires, in coordinated universal time (UTC) timestamp format as specified in RFC 3339.
    ///   - name: The friendly name of the personal access token.
    ///   - logger: Logger use during operation
    @inlinable
    public func createAccessToken(
        expiresTime: Date? = nil,
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateAccessTokenResponse {
        let input = CreateAccessTokenRequest(
            expiresTime: expiresTime, 
            name: name
        )
        return try await self.createAccessToken(input, logger: logger)
    }

    /// Creates a Dev Environment in Amazon CodeCatalyst, a cloud-based development environment that you can use to quickly work on the code stored  in the source repositories of your project.         When created in the Amazon CodeCatalyst console, by default a Dev Environment is configured to have a 2 core processor, 4GB of RAM, and 16GB of persistent storage. None of these defaults apply to a Dev Environment created programmatically.
    @Sendable
    @inlinable
    public func createDevEnvironment(_ input: CreateDevEnvironmentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDevEnvironmentResponse {
        try await self.client.execute(
            operation: "CreateDevEnvironment", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/devEnvironments", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a Dev Environment in Amazon CodeCatalyst, a cloud-based development environment that you can use to quickly work on the code stored  in the source repositories of your project.         When created in the Amazon CodeCatalyst console, by default a Dev Environment is configured to have a 2 core processor, 4GB of RAM, and 16GB of persistent storage. None of these defaults apply to a Dev Environment created programmatically.
    ///
    /// Parameters:
    ///   - alias: The user-defined alias for a Dev Environment.
    ///   - clientToken: A user-specified idempotency token.  Idempotency ensures that an API request completes only once.  With an idempotent request, if the original request completes successfully, the subsequent retries return the result from the original successful request and have no additional effect.
    ///   - ides: Information about the integrated development environment (IDE) configured for a Dev Environment.  An IDE is required to create a Dev Environment. For Dev Environment creation, this field contains configuration information and must be provided.
    ///   - inactivityTimeoutMinutes: The amount of time the Dev Environment will run without any activity detected before stopping, in minutes. Only whole integers are allowed. Dev Environments consume compute minutes when running.
    ///   - instanceType: The Amazon EC2 instace type to use for the Dev Environment.
    ///   - persistentStorage: Information about the amount of storage allocated to the Dev Environment.   By default, a Dev Environment is configured to have 16GB of persistent storage when created from the Amazon CodeCatalyst console, but there is no default when programmatically creating a Dev Environment.  Valid values for persistent storage are based on memory sizes in 16GB increments. Valid values are 16, 32, and 64.
    ///   - projectName: The name of the project in the space.
    ///   - repositories: The source repository that contains the branch to clone into the Dev Environment.
    ///   - spaceName: The name of the space.
    ///   - vpcConnectionName: The name of the connection that will be used to connect to Amazon VPC, if any.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDevEnvironment(
        alias: String? = nil,
        clientToken: String? = nil,
        ides: [IdeConfiguration]? = nil,
        inactivityTimeoutMinutes: Int? = nil,
        instanceType: InstanceType,
        persistentStorage: PersistentStorageConfiguration,
        projectName: String,
        repositories: [RepositoryInput]? = nil,
        spaceName: String,
        vpcConnectionName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDevEnvironmentResponse {
        let input = CreateDevEnvironmentRequest(
            alias: alias, 
            clientToken: clientToken, 
            ides: ides, 
            inactivityTimeoutMinutes: inactivityTimeoutMinutes, 
            instanceType: instanceType, 
            persistentStorage: persistentStorage, 
            projectName: projectName, 
            repositories: repositories, 
            spaceName: spaceName, 
            vpcConnectionName: vpcConnectionName
        )
        return try await self.createDevEnvironment(input, logger: logger)
    }

    /// Creates a project in a specified space.
    @Sendable
    @inlinable
    public func createProject(_ input: CreateProjectRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateProjectResponse {
        try await self.client.execute(
            operation: "CreateProject", 
            path: "/v1/spaces/{spaceName}/projects", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a project in a specified space.
    ///
    /// Parameters:
    ///   - description: The description of the project. This description will be displayed to all users of the project. We recommend providing a brief description of the project and its intended purpose.
    ///   - displayName: The friendly name of the project that will be displayed to users.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func createProject(
        description: String? = nil,
        displayName: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateProjectResponse {
        let input = CreateProjectRequest(
            description: description, 
            displayName: displayName, 
            spaceName: spaceName
        )
        return try await self.createProject(input, logger: logger)
    }

    /// Creates an empty Git-based source repository in a specified project. The repository is created with an initial empty commit with a default branch named main.
    @Sendable
    @inlinable
    public func createSourceRepository(_ input: CreateSourceRepositoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateSourceRepositoryResponse {
        try await self.client.execute(
            operation: "CreateSourceRepository", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/sourceRepositories/{name}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an empty Git-based source repository in a specified project. The repository is created with an initial empty commit with a default branch named main.
    ///
    /// Parameters:
    ///   - description: The description of the source repository.
    ///   - name: The name of the source repository. For more information about name requirements, see Quotas for source repositories.
    ///   - projectName: The name of the project in the space.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func createSourceRepository(
        description: String? = nil,
        name: String,
        projectName: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateSourceRepositoryResponse {
        let input = CreateSourceRepositoryRequest(
            description: description, 
            name: name, 
            projectName: projectName, 
            spaceName: spaceName
        )
        return try await self.createSourceRepository(input, logger: logger)
    }

    /// Creates a branch in a specified source repository in Amazon CodeCatalyst.   This API only creates a branch in a source repository hosted in Amazon CodeCatalyst. You cannot use this API to create a branch in a linked repository.
    @Sendable
    @inlinable
    public func createSourceRepositoryBranch(_ input: CreateSourceRepositoryBranchRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateSourceRepositoryBranchResponse {
        try await self.client.execute(
            operation: "CreateSourceRepositoryBranch", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/sourceRepositories/{sourceRepositoryName}/branches/{name}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a branch in a specified source repository in Amazon CodeCatalyst.   This API only creates a branch in a source repository hosted in Amazon CodeCatalyst. You cannot use this API to create a branch in a linked repository.
    ///
    /// Parameters:
    ///   - headCommitId: The commit ID in an existing branch from which you want to create the new branch.
    ///   - name: The name for the branch you're creating.
    ///   - projectName: The name of the project in the space.
    ///   - sourceRepositoryName: The name of the repository where you want to create a branch.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func createSourceRepositoryBranch(
        headCommitId: String? = nil,
        name: String,
        projectName: String,
        sourceRepositoryName: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateSourceRepositoryBranchResponse {
        let input = CreateSourceRepositoryBranchRequest(
            headCommitId: headCommitId, 
            name: name, 
            projectName: projectName, 
            sourceRepositoryName: sourceRepositoryName, 
            spaceName: spaceName
        )
        return try await self.createSourceRepositoryBranch(input, logger: logger)
    }

    /// Deletes a specified personal access token (PAT). A personal access token can only be deleted by the user who created it.
    @Sendable
    @inlinable
    public func deleteAccessToken(_ input: DeleteAccessTokenRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteAccessTokenResponse {
        try await self.client.execute(
            operation: "DeleteAccessToken", 
            path: "/v1/accessTokens/{id}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a specified personal access token (PAT). A personal access token can only be deleted by the user who created it.
    ///
    /// Parameters:
    ///   - id: The ID of the personal access token to delete. You can find the IDs of all PATs associated with your Amazon Web Services Builder ID in a space by calling ListAccessTokens.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAccessToken(
        id: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteAccessTokenResponse {
        let input = DeleteAccessTokenRequest(
            id: id
        )
        return try await self.deleteAccessToken(input, logger: logger)
    }

    /// Deletes a Dev Environment.
    @Sendable
    @inlinable
    public func deleteDevEnvironment(_ input: DeleteDevEnvironmentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteDevEnvironmentResponse {
        try await self.client.execute(
            operation: "DeleteDevEnvironment", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/devEnvironments/{id}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a Dev Environment.
    ///
    /// Parameters:
    ///   - id: The system-generated unique ID of the Dev Environment you want to delete. To retrieve a list of Dev Environment IDs, use ListDevEnvironments.
    ///   - projectName: The name of the project in the space.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDevEnvironment(
        id: String,
        projectName: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteDevEnvironmentResponse {
        let input = DeleteDevEnvironmentRequest(
            id: id, 
            projectName: projectName, 
            spaceName: spaceName
        )
        return try await self.deleteDevEnvironment(input, logger: logger)
    }

    /// Deletes a project in a space.
    @Sendable
    @inlinable
    public func deleteProject(_ input: DeleteProjectRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteProjectResponse {
        try await self.client.execute(
            operation: "DeleteProject", 
            path: "/v1/spaces/{spaceName}/projects/{name}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a project in a space.
    ///
    /// Parameters:
    ///   - name: The name of the project in the space. To retrieve a list of project names, use ListProjects.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteProject(
        name: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteProjectResponse {
        let input = DeleteProjectRequest(
            name: name, 
            spaceName: spaceName
        )
        return try await self.deleteProject(input, logger: logger)
    }

    /// Deletes a source repository in Amazon CodeCatalyst. You cannot use this API to delete a linked repository. It can only be used to delete a Amazon CodeCatalyst source repository.
    @Sendable
    @inlinable
    public func deleteSourceRepository(_ input: DeleteSourceRepositoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteSourceRepositoryResponse {
        try await self.client.execute(
            operation: "DeleteSourceRepository", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/sourceRepositories/{name}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a source repository in Amazon CodeCatalyst. You cannot use this API to delete a linked repository. It can only be used to delete a Amazon CodeCatalyst source repository.
    ///
    /// Parameters:
    ///   - name: The name of the source repository.
    ///   - projectName: The name of the project in the space.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteSourceRepository(
        name: String,
        projectName: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteSourceRepositoryResponse {
        let input = DeleteSourceRepositoryRequest(
            name: name, 
            projectName: projectName, 
            spaceName: spaceName
        )
        return try await self.deleteSourceRepository(input, logger: logger)
    }

    /// Deletes a space.  Deleting a space cannot be undone. Additionally, since space names must be unique across Amazon CodeCatalyst, you cannot reuse names of deleted spaces.
    @Sendable
    @inlinable
    public func deleteSpace(_ input: DeleteSpaceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteSpaceResponse {
        try await self.client.execute(
            operation: "DeleteSpace", 
            path: "/v1/spaces/{name}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a space.  Deleting a space cannot be undone. Additionally, since space names must be unique across Amazon CodeCatalyst, you cannot reuse names of deleted spaces.
    ///
    /// Parameters:
    ///   - name: The name of the space.  To retrieve a list of space names, use ListSpaces.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteSpace(
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteSpaceResponse {
        let input = DeleteSpaceRequest(
            name: name
        )
        return try await self.deleteSpace(input, logger: logger)
    }

    /// Returns information about a Dev Environment for a source repository in a project. Dev Environments are specific to the user who creates them.
    @Sendable
    @inlinable
    public func getDevEnvironment(_ input: GetDevEnvironmentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDevEnvironmentResponse {
        try await self.client.execute(
            operation: "GetDevEnvironment", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/devEnvironments/{id}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about a Dev Environment for a source repository in a project. Dev Environments are specific to the user who creates them.
    ///
    /// Parameters:
    ///   - id: The system-generated unique ID of the Dev Environment for which you want to view information. To retrieve a list of Dev Environment IDs, use ListDevEnvironments.
    ///   - projectName: The name of the project in the space.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDevEnvironment(
        id: String,
        projectName: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDevEnvironmentResponse {
        let input = GetDevEnvironmentRequest(
            id: id, 
            projectName: projectName, 
            spaceName: spaceName
        )
        return try await self.getDevEnvironment(input, logger: logger)
    }

    /// Returns information about a project.
    @Sendable
    @inlinable
    public func getProject(_ input: GetProjectRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetProjectResponse {
        try await self.client.execute(
            operation: "GetProject", 
            path: "/v1/spaces/{spaceName}/projects/{name}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about a project.
    ///
    /// Parameters:
    ///   - name: The name of the project in the space.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func getProject(
        name: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetProjectResponse {
        let input = GetProjectRequest(
            name: name, 
            spaceName: spaceName
        )
        return try await self.getProject(input, logger: logger)
    }

    /// Returns information about a source repository.
    @Sendable
    @inlinable
    public func getSourceRepository(_ input: GetSourceRepositoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetSourceRepositoryResponse {
        try await self.client.execute(
            operation: "GetSourceRepository", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/sourceRepositories/{name}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about a source repository.
    ///
    /// Parameters:
    ///   - name: The name of the source repository.
    ///   - projectName: The name of the project in the space.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func getSourceRepository(
        name: String,
        projectName: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetSourceRepositoryResponse {
        let input = GetSourceRepositoryRequest(
            name: name, 
            projectName: projectName, 
            spaceName: spaceName
        )
        return try await self.getSourceRepository(input, logger: logger)
    }

    /// Returns information about the URLs that can be used with a Git client to clone a source repository.
    @Sendable
    @inlinable
    public func getSourceRepositoryCloneUrls(_ input: GetSourceRepositoryCloneUrlsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetSourceRepositoryCloneUrlsResponse {
        try await self.client.execute(
            operation: "GetSourceRepositoryCloneUrls", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/sourceRepositories/{sourceRepositoryName}/cloneUrls", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the URLs that can be used with a Git client to clone a source repository.
    ///
    /// Parameters:
    ///   - projectName: The name of the project in the space.
    ///   - sourceRepositoryName: The name of the source repository.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func getSourceRepositoryCloneUrls(
        projectName: String,
        sourceRepositoryName: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetSourceRepositoryCloneUrlsResponse {
        let input = GetSourceRepositoryCloneUrlsRequest(
            projectName: projectName, 
            sourceRepositoryName: sourceRepositoryName, 
            spaceName: spaceName
        )
        return try await self.getSourceRepositoryCloneUrls(input, logger: logger)
    }

    /// Returns information about an space.
    @Sendable
    @inlinable
    public func getSpace(_ input: GetSpaceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetSpaceResponse {
        try await self.client.execute(
            operation: "GetSpace", 
            path: "/v1/spaces/{name}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about an space.
    ///
    /// Parameters:
    ///   - name: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func getSpace(
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetSpaceResponse {
        let input = GetSpaceRequest(
            name: name
        )
        return try await self.getSpace(input, logger: logger)
    }

    /// Returns information about the Amazon Web Services account used for billing purposes  and the billing plan for the space.
    @Sendable
    @inlinable
    public func getSubscription(_ input: GetSubscriptionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetSubscriptionResponse {
        try await self.client.execute(
            operation: "GetSubscription", 
            path: "/v1/spaces/{spaceName}/subscription", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the Amazon Web Services account used for billing purposes  and the billing plan for the space.
    ///
    /// Parameters:
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func getSubscription(
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetSubscriptionResponse {
        let input = GetSubscriptionRequest(
            spaceName: spaceName
        )
        return try await self.getSubscription(input, logger: logger)
    }

    /// Returns information about a user.
    @Sendable
    @inlinable
    public func getUserDetails(_ input: GetUserDetailsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetUserDetailsResponse {
        try await self.client.execute(
            operation: "GetUserDetails", 
            path: "/userDetails", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about a user.
    ///
    /// Parameters:
    ///   - id: The system-generated unique ID of the user.
    ///   - userName: The name of the user as displayed in Amazon CodeCatalyst.
    ///   - logger: Logger use during operation
    @inlinable
    public func getUserDetails(
        id: String? = nil,
        userName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetUserDetailsResponse {
        let input = GetUserDetailsRequest(
            id: id, 
            userName: userName
        )
        return try await self.getUserDetails(input, logger: logger)
    }

    /// Returns information about a workflow.
    @Sendable
    @inlinable
    public func getWorkflow(_ input: GetWorkflowRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetWorkflowResponse {
        try await self.client.execute(
            operation: "GetWorkflow", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/workflows/{id}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about a workflow.
    ///
    /// Parameters:
    ///   - id: The ID of the workflow. To rerieve a list of workflow IDs, use ListWorkflows.
    ///   - projectName: The name of the project in the space.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func getWorkflow(
        id: String,
        projectName: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetWorkflowResponse {
        let input = GetWorkflowRequest(
            id: id, 
            projectName: projectName, 
            spaceName: spaceName
        )
        return try await self.getWorkflow(input, logger: logger)
    }

    /// Returns information about a specified run of a workflow.
    @Sendable
    @inlinable
    public func getWorkflowRun(_ input: GetWorkflowRunRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetWorkflowRunResponse {
        try await self.client.execute(
            operation: "GetWorkflowRun", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/workflowRuns/{id}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about a specified run of a workflow.
    ///
    /// Parameters:
    ///   - id: The ID of the workflow run. To retrieve a list of workflow run IDs, use ListWorkflowRuns.
    ///   - projectName: The name of the project in the space.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func getWorkflowRun(
        id: String,
        projectName: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetWorkflowRunResponse {
        let input = GetWorkflowRunRequest(
            id: id, 
            projectName: projectName, 
            spaceName: spaceName
        )
        return try await self.getWorkflowRun(input, logger: logger)
    }

    /// Lists all personal access tokens (PATs) associated with the user who calls the API. You can only list PATs associated with your Amazon Web Services Builder ID.
    @Sendable
    @inlinable
    public func listAccessTokens(_ input: ListAccessTokensRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAccessTokensResponse {
        try await self.client.execute(
            operation: "ListAccessTokens", 
            path: "/v1/accessTokens", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all personal access tokens (PATs) associated with the user who calls the API. You can only list PATs associated with your Amazon Web Services Builder ID.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to show in a single call to this API. If the number of results is larger than the number you specified, the response will include a NextToken element, which you can use to obtain additional results.
    ///   - nextToken: A token returned from a call to this API to indicate the next batch of results to return, if any.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAccessTokens(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAccessTokensResponse {
        let input = ListAccessTokensRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAccessTokens(input, logger: logger)
    }

    /// Retrieves a list of active sessions for a Dev Environment in a project.
    @Sendable
    @inlinable
    public func listDevEnvironmentSessions(_ input: ListDevEnvironmentSessionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDevEnvironmentSessionsResponse {
        try await self.client.execute(
            operation: "ListDevEnvironmentSessions", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/devEnvironments/{devEnvironmentId}/sessions", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a list of active sessions for a Dev Environment in a project.
    ///
    /// Parameters:
    ///   - devEnvironmentId: The system-generated unique ID of the Dev Environment.
    ///   - maxResults: The maximum number of results to show in a single call to this API. If the number of results is larger than the number you specified, the response will include a NextToken element, which you can use to obtain additional results.
    ///   - nextToken: A token returned from a call to this API to indicate the next batch of results to return, if any.
    ///   - projectName: The name of the project in the space.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDevEnvironmentSessions(
        devEnvironmentId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        projectName: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDevEnvironmentSessionsResponse {
        let input = ListDevEnvironmentSessionsRequest(
            devEnvironmentId: devEnvironmentId, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            projectName: projectName, 
            spaceName: spaceName
        )
        return try await self.listDevEnvironmentSessions(input, logger: logger)
    }

    /// Retrieves a list of Dev Environments in a project.
    @Sendable
    @inlinable
    public func listDevEnvironments(_ input: ListDevEnvironmentsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDevEnvironmentsResponse {
        try await self.client.execute(
            operation: "ListDevEnvironments", 
            path: "/v1/spaces/{spaceName}/devEnvironments", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a list of Dev Environments in a project.
    ///
    /// Parameters:
    ///   - filters: Information about filters to apply to narrow the results returned in the list.
    ///   - maxResults: The maximum number of results to show in a single call to this API. If the number of results is larger than the number you specified, the response will include a NextToken element, which you can use to obtain additional results.
    ///   - nextToken: A token returned from a call to this API to indicate the next batch of results to return, if any.
    ///   - projectName: The name of the project in the space.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDevEnvironments(
        filters: [Filter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        projectName: String? = nil,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDevEnvironmentsResponse {
        let input = ListDevEnvironmentsRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            projectName: projectName, 
            spaceName: spaceName
        )
        return try await self.listDevEnvironments(input, logger: logger)
    }

    /// Retrieves a list of events that occurred during a specific time in a space. You can use these events to audit user and system activity in a space. For more information, see Monitoring in the Amazon CodeCatalyst User Guide.  ListEventLogs guarantees events for the last 30 days in a given space. You can also view and retrieve a list of management events over the last 90 days for Amazon CodeCatalyst in the CloudTrail console by viewing Event history, or by creating a trail to create and maintain a record of events that extends past 90 days. For more information, see Working with CloudTrail Event History and Working with CloudTrail trails.
    @Sendable
    @inlinable
    public func listEventLogs(_ input: ListEventLogsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListEventLogsResponse {
        try await self.client.execute(
            operation: "ListEventLogs", 
            path: "/v1/spaces/{spaceName}/eventLogs", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a list of events that occurred during a specific time in a space. You can use these events to audit user and system activity in a space. For more information, see Monitoring in the Amazon CodeCatalyst User Guide.  ListEventLogs guarantees events for the last 30 days in a given space. You can also view and retrieve a list of management events over the last 90 days for Amazon CodeCatalyst in the CloudTrail console by viewing Event history, or by creating a trail to create and maintain a record of events that extends past 90 days. For more information, see Working with CloudTrail Event History and Working with CloudTrail trails.
    ///
    /// Parameters:
    ///   - endTime: The time after which you do not want any events retrieved, in coordinated universal time (UTC) timestamp format as specified in RFC 3339.
    ///   - eventName: The name of the event.
    ///   - maxResults: The maximum number of results to show in a single call to this API. If the number of results is larger than the number you specified, the response will include a NextToken element, which you can use to obtain additional results.
    ///   - nextToken: A token returned from a call to this API to indicate the next batch of results to return, if any.
    ///   - spaceName: The name of the space.
    ///   - startTime: The date and time when you want to start retrieving events, in coordinated universal time (UTC) timestamp format as specified in RFC 3339.
    ///   - logger: Logger use during operation
    @inlinable
    public func listEventLogs(
        endTime: Date,
        eventName: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        spaceName: String,
        startTime: Date,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListEventLogsResponse {
        let input = ListEventLogsRequest(
            endTime: endTime, 
            eventName: eventName, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            spaceName: spaceName, 
            startTime: startTime
        )
        return try await self.listEventLogs(input, logger: logger)
    }

    /// Retrieves a list of projects.
    @Sendable
    @inlinable
    public func listProjects(_ input: ListProjectsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListProjectsResponse {
        try await self.client.execute(
            operation: "ListProjects", 
            path: "/v1/spaces/{spaceName}/projects", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a list of projects.
    ///
    /// Parameters:
    ///   - filters: Information about filters to apply to narrow the results returned in the list.
    ///   - maxResults: The maximum number of results to show in a single call to this API. If the number of results is larger than the number you specified, the response will include a NextToken element, which you can use to obtain additional results.
    ///   - nextToken: A token returned from a call to this API to indicate the next batch of results to return, if any.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func listProjects(
        filters: [ProjectListFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListProjectsResponse {
        let input = ListProjectsRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            spaceName: spaceName
        )
        return try await self.listProjects(input, logger: logger)
    }

    /// Retrieves a list of source repositories in a project.
    @Sendable
    @inlinable
    public func listSourceRepositories(_ input: ListSourceRepositoriesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListSourceRepositoriesResponse {
        try await self.client.execute(
            operation: "ListSourceRepositories", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/sourceRepositories", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a list of source repositories in a project.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to show in a single call to this API. If the number of results is larger than the number you specified, the response will include a NextToken element, which you can use to obtain additional results.
    ///   - nextToken: A token returned from a call to this API to indicate the next batch of results to return, if any.
    ///   - projectName: The name of the project in the space.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func listSourceRepositories(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        projectName: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListSourceRepositoriesResponse {
        let input = ListSourceRepositoriesRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            projectName: projectName, 
            spaceName: spaceName
        )
        return try await self.listSourceRepositories(input, logger: logger)
    }

    /// Retrieves a list of branches in a specified source repository.
    @Sendable
    @inlinable
    public func listSourceRepositoryBranches(_ input: ListSourceRepositoryBranchesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListSourceRepositoryBranchesResponse {
        try await self.client.execute(
            operation: "ListSourceRepositoryBranches", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/sourceRepositories/{sourceRepositoryName}/branches", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a list of branches in a specified source repository.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to show in a single call to this API. If the number of results is larger than the number you specified, the response will include a NextToken element, which you can use to obtain additional results.
    ///   - nextToken: A token returned from a call to this API to indicate the next batch of results to return, if any.
    ///   - projectName: The name of the project in the space.
    ///   - sourceRepositoryName: The name of the source repository.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func listSourceRepositoryBranches(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        projectName: String,
        sourceRepositoryName: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListSourceRepositoryBranchesResponse {
        let input = ListSourceRepositoryBranchesRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            projectName: projectName, 
            sourceRepositoryName: sourceRepositoryName, 
            spaceName: spaceName
        )
        return try await self.listSourceRepositoryBranches(input, logger: logger)
    }

    /// Retrieves a list of spaces.
    @Sendable
    @inlinable
    public func listSpaces(_ input: ListSpacesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListSpacesResponse {
        try await self.client.execute(
            operation: "ListSpaces", 
            path: "/v1/spaces", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a list of spaces.
    ///
    /// Parameters:
    ///   - nextToken: A token returned from a call to this API to indicate the next batch of results to return, if any.
    ///   - logger: Logger use during operation
    @inlinable
    public func listSpaces(
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListSpacesResponse {
        let input = ListSpacesRequest(
            nextToken: nextToken
        )
        return try await self.listSpaces(input, logger: logger)
    }

    /// Retrieves a list of workflow runs of a specified workflow.
    @Sendable
    @inlinable
    public func listWorkflowRuns(_ input: ListWorkflowRunsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListWorkflowRunsResponse {
        try await self.client.execute(
            operation: "ListWorkflowRuns", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/workflowRuns", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a list of workflow runs of a specified workflow.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to show in a single call to this API. If the number of results is larger than the number you specified, the response will include a NextToken element, which you can use to obtain additional results.
    ///   - nextToken: A token returned from a call to this API to indicate the next batch of results to return, if any.
    ///   - projectName: The name of the project in the space.
    ///   - sortBy: Information used to sort the items in the returned list.
    ///   - spaceName: The name of the space.
    ///   - workflowId: The ID of the workflow. To retrieve a list of workflow IDs, use ListWorkflows.
    ///   - logger: Logger use during operation
    @inlinable
    public func listWorkflowRuns(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        projectName: String,
        sortBy: [WorkflowRunSortCriteria]? = nil,
        spaceName: String,
        workflowId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListWorkflowRunsResponse {
        let input = ListWorkflowRunsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            projectName: projectName, 
            sortBy: sortBy, 
            spaceName: spaceName, 
            workflowId: workflowId
        )
        return try await self.listWorkflowRuns(input, logger: logger)
    }

    /// Retrieves a list of workflows in a specified project.
    @Sendable
    @inlinable
    public func listWorkflows(_ input: ListWorkflowsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListWorkflowsResponse {
        try await self.client.execute(
            operation: "ListWorkflows", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/workflows", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a list of workflows in a specified project.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to show in a single call to this API. If the number of results is larger than the number you specified, the response will include a NextToken element, which you can use to obtain additional results.
    ///   - nextToken: A token returned from a call to this API to indicate the next batch of results to return, if any.
    ///   - projectName: The name of the project in the space.
    ///   - sortBy: Information used to sort the items in the returned list.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func listWorkflows(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        projectName: String,
        sortBy: [WorkflowSortCriteria]? = nil,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListWorkflowsResponse {
        let input = ListWorkflowsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            projectName: projectName, 
            sortBy: sortBy, 
            spaceName: spaceName
        )
        return try await self.listWorkflows(input, logger: logger)
    }

    /// Starts a specified Dev Environment and puts it into an active state.
    @Sendable
    @inlinable
    public func startDevEnvironment(_ input: StartDevEnvironmentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartDevEnvironmentResponse {
        try await self.client.execute(
            operation: "StartDevEnvironment", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/devEnvironments/{id}/start", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts a specified Dev Environment and puts it into an active state.
    ///
    /// Parameters:
    ///   - id: The system-generated unique ID of the Dev Environment.
    ///   - ides: Information about the integrated development environment (IDE) configured for a Dev Environment.
    ///   - inactivityTimeoutMinutes: The amount of time the Dev Environment will run without any activity detected before stopping, in minutes. Only whole integers are allowed. Dev Environments consume compute minutes when running.
    ///   - instanceType: The Amazon EC2 instace type to use for the Dev Environment.
    ///   - projectName: The name of the project in the space.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func startDevEnvironment(
        id: String,
        ides: [IdeConfiguration]? = nil,
        inactivityTimeoutMinutes: Int? = nil,
        instanceType: InstanceType? = nil,
        projectName: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartDevEnvironmentResponse {
        let input = StartDevEnvironmentRequest(
            id: id, 
            ides: ides, 
            inactivityTimeoutMinutes: inactivityTimeoutMinutes, 
            instanceType: instanceType, 
            projectName: projectName, 
            spaceName: spaceName
        )
        return try await self.startDevEnvironment(input, logger: logger)
    }

    /// Starts a session for a specified Dev Environment.
    @Sendable
    @inlinable
    public func startDevEnvironmentSession(_ input: StartDevEnvironmentSessionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartDevEnvironmentSessionResponse {
        try await self.client.execute(
            operation: "StartDevEnvironmentSession", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/devEnvironments/{id}/session", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts a session for a specified Dev Environment.
    ///
    /// Parameters:
    ///   - id: The system-generated unique ID of the Dev Environment.
    ///   - projectName: The name of the project in the space.
    ///   - sessionConfiguration: 
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func startDevEnvironmentSession(
        id: String,
        projectName: String,
        sessionConfiguration: DevEnvironmentSessionConfiguration,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartDevEnvironmentSessionResponse {
        let input = StartDevEnvironmentSessionRequest(
            id: id, 
            projectName: projectName, 
            sessionConfiguration: sessionConfiguration, 
            spaceName: spaceName
        )
        return try await self.startDevEnvironmentSession(input, logger: logger)
    }

    /// Begins a run of a specified workflow.
    @Sendable
    @inlinable
    public func startWorkflowRun(_ input: StartWorkflowRunRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartWorkflowRunResponse {
        try await self.client.execute(
            operation: "StartWorkflowRun", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/workflowRuns", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Begins a run of a specified workflow.
    ///
    /// Parameters:
    ///   - clientToken: A user-specified idempotency token.  Idempotency ensures that an API request completes only once.  With an idempotent request, if the original request completes successfully, the subsequent retries return the result from the original successful request and have no additional effect.
    ///   - projectName: The name of the project in the space.
    ///   - spaceName: The name of the space.
    ///   - workflowId: The system-generated unique ID of the workflow. To retrieve a list of workflow IDs, use ListWorkflows.
    ///   - logger: Logger use during operation
    @inlinable
    public func startWorkflowRun(
        clientToken: String? = StartWorkflowRunRequest.idempotencyToken(),
        projectName: String,
        spaceName: String,
        workflowId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartWorkflowRunResponse {
        let input = StartWorkflowRunRequest(
            clientToken: clientToken, 
            projectName: projectName, 
            spaceName: spaceName, 
            workflowId: workflowId
        )
        return try await self.startWorkflowRun(input, logger: logger)
    }

    /// Pauses a specified Dev Environment and places it in a non-running state. Stopped Dev Environments do not consume compute minutes.
    @Sendable
    @inlinable
    public func stopDevEnvironment(_ input: StopDevEnvironmentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StopDevEnvironmentResponse {
        try await self.client.execute(
            operation: "StopDevEnvironment", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/devEnvironments/{id}/stop", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Pauses a specified Dev Environment and places it in a non-running state. Stopped Dev Environments do not consume compute minutes.
    ///
    /// Parameters:
    ///   - id: The system-generated unique ID of the Dev Environment.
    ///   - projectName: The name of the project in the space.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopDevEnvironment(
        id: String,
        projectName: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StopDevEnvironmentResponse {
        let input = StopDevEnvironmentRequest(
            id: id, 
            projectName: projectName, 
            spaceName: spaceName
        )
        return try await self.stopDevEnvironment(input, logger: logger)
    }

    /// Stops a session for a specified Dev Environment.
    @Sendable
    @inlinable
    public func stopDevEnvironmentSession(_ input: StopDevEnvironmentSessionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StopDevEnvironmentSessionResponse {
        try await self.client.execute(
            operation: "StopDevEnvironmentSession", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/devEnvironments/{id}/session/{sessionId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stops a session for a specified Dev Environment.
    ///
    /// Parameters:
    ///   - id: The system-generated unique ID of the Dev Environment. To obtain this ID, use ListDevEnvironments.
    ///   - projectName: The name of the project in the space.
    ///   - sessionId: The system-generated unique ID of the Dev Environment session. This ID is returned by StartDevEnvironmentSession.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopDevEnvironmentSession(
        id: String,
        projectName: String,
        sessionId: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StopDevEnvironmentSessionResponse {
        let input = StopDevEnvironmentSessionRequest(
            id: id, 
            projectName: projectName, 
            sessionId: sessionId, 
            spaceName: spaceName
        )
        return try await self.stopDevEnvironmentSession(input, logger: logger)
    }

    /// Changes one or more values for a Dev Environment. Updating certain values of the Dev Environment will cause a restart.
    @Sendable
    @inlinable
    public func updateDevEnvironment(_ input: UpdateDevEnvironmentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateDevEnvironmentResponse {
        try await self.client.execute(
            operation: "UpdateDevEnvironment", 
            path: "/v1/spaces/{spaceName}/projects/{projectName}/devEnvironments/{id}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Changes one or more values for a Dev Environment. Updating certain values of the Dev Environment will cause a restart.
    ///
    /// Parameters:
    ///   - alias: The user-specified alias for the Dev Environment. Changing this value will not cause a restart.
    ///   - clientToken: A user-specified idempotency token.  Idempotency ensures that an API request completes only once.  With an idempotent request, if the original request completes successfully, the subsequent retries return the result from the original successful request and have no additional effect.
    ///   - id: The system-generated unique ID of the Dev Environment.
    ///   - ides: Information about the integrated development environment (IDE) configured for a Dev Environment.
    ///   - inactivityTimeoutMinutes: The amount of time the Dev Environment will run without any activity detected before stopping, in minutes.  Only whole integers are allowed. Dev Environments consume compute minutes when running.  Changing this value will cause a restart of the Dev Environment if it is running.
    ///   - instanceType: The Amazon EC2 instace type to use for the Dev Environment.   Changing this value will cause a restart of the Dev Environment if it is running.
    ///   - projectName: The name of the project in the space.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDevEnvironment(
        alias: String? = nil,
        clientToken: String? = nil,
        id: String,
        ides: [IdeConfiguration]? = nil,
        inactivityTimeoutMinutes: Int? = nil,
        instanceType: InstanceType? = nil,
        projectName: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateDevEnvironmentResponse {
        let input = UpdateDevEnvironmentRequest(
            alias: alias, 
            clientToken: clientToken, 
            id: id, 
            ides: ides, 
            inactivityTimeoutMinutes: inactivityTimeoutMinutes, 
            instanceType: instanceType, 
            projectName: projectName, 
            spaceName: spaceName
        )
        return try await self.updateDevEnvironment(input, logger: logger)
    }

    /// Changes one or more values for a project.
    @Sendable
    @inlinable
    public func updateProject(_ input: UpdateProjectRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateProjectResponse {
        try await self.client.execute(
            operation: "UpdateProject", 
            path: "/v1/spaces/{spaceName}/projects/{name}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Changes one or more values for a project.
    ///
    /// Parameters:
    ///   - description: The description of the project.
    ///   - name: The name of the project.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateProject(
        description: String? = nil,
        name: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateProjectResponse {
        let input = UpdateProjectRequest(
            description: description, 
            name: name, 
            spaceName: spaceName
        )
        return try await self.updateProject(input, logger: logger)
    }

    /// Changes one or more values for a space.
    @Sendable
    @inlinable
    public func updateSpace(_ input: UpdateSpaceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateSpaceResponse {
        try await self.client.execute(
            operation: "UpdateSpace", 
            path: "/v1/spaces/{name}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Changes one or more values for a space.
    ///
    /// Parameters:
    ///   - description: The description of the space.
    ///   - name: The name of the space.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateSpace(
        description: String? = nil,
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateSpaceResponse {
        let input = UpdateSpaceRequest(
            description: description, 
            name: name
        )
        return try await self.updateSpace(input, logger: logger)
    }

    /// Verifies whether the calling user has a valid Amazon CodeCatalyst login and session.  If successful, this returns the ID of the user in Amazon CodeCatalyst.
    @Sendable
    @inlinable
    public func verifySession(logger: Logger = AWSClient.loggingDisabled) async throws -> VerifySessionResponse {
        try await self.client.execute(
            operation: "VerifySession", 
            path: "/session", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            logger: logger
        )
    }
}

extension CodeCatalyst {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: CodeCatalyst, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension CodeCatalyst {
    /// Return PaginatorSequence for operation ``listAccessTokens(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAccessTokensPaginator(
        _ input: ListAccessTokensRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAccessTokensRequest, ListAccessTokensResponse> {
        return .init(
            input: input,
            command: self.listAccessTokens,
            inputKey: \ListAccessTokensRequest.nextToken,
            outputKey: \ListAccessTokensResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAccessTokens(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to show in a single call to this API. If the number of results is larger than the number you specified, the response will include a NextToken element, which you can use to obtain additional results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAccessTokensPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAccessTokensRequest, ListAccessTokensResponse> {
        let input = ListAccessTokensRequest(
            maxResults: maxResults
        )
        return self.listAccessTokensPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDevEnvironmentSessions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDevEnvironmentSessionsPaginator(
        _ input: ListDevEnvironmentSessionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDevEnvironmentSessionsRequest, ListDevEnvironmentSessionsResponse> {
        return .init(
            input: input,
            command: self.listDevEnvironmentSessions,
            inputKey: \ListDevEnvironmentSessionsRequest.nextToken,
            outputKey: \ListDevEnvironmentSessionsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDevEnvironmentSessions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - devEnvironmentId: The system-generated unique ID of the Dev Environment.
    ///   - maxResults: The maximum number of results to show in a single call to this API. If the number of results is larger than the number you specified, the response will include a NextToken element, which you can use to obtain additional results.
    ///   - projectName: The name of the project in the space.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDevEnvironmentSessionsPaginator(
        devEnvironmentId: String,
        maxResults: Int? = nil,
        projectName: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDevEnvironmentSessionsRequest, ListDevEnvironmentSessionsResponse> {
        let input = ListDevEnvironmentSessionsRequest(
            devEnvironmentId: devEnvironmentId, 
            maxResults: maxResults, 
            projectName: projectName, 
            spaceName: spaceName
        )
        return self.listDevEnvironmentSessionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDevEnvironments(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDevEnvironmentsPaginator(
        _ input: ListDevEnvironmentsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDevEnvironmentsRequest, ListDevEnvironmentsResponse> {
        return .init(
            input: input,
            command: self.listDevEnvironments,
            inputKey: \ListDevEnvironmentsRequest.nextToken,
            outputKey: \ListDevEnvironmentsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDevEnvironments(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: Information about filters to apply to narrow the results returned in the list.
    ///   - maxResults: The maximum number of results to show in a single call to this API. If the number of results is larger than the number you specified, the response will include a NextToken element, which you can use to obtain additional results.
    ///   - projectName: The name of the project in the space.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDevEnvironmentsPaginator(
        filters: [Filter]? = nil,
        maxResults: Int? = nil,
        projectName: String? = nil,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDevEnvironmentsRequest, ListDevEnvironmentsResponse> {
        let input = ListDevEnvironmentsRequest(
            filters: filters, 
            maxResults: maxResults, 
            projectName: projectName, 
            spaceName: spaceName
        )
        return self.listDevEnvironmentsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listEventLogs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listEventLogsPaginator(
        _ input: ListEventLogsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListEventLogsRequest, ListEventLogsResponse> {
        return .init(
            input: input,
            command: self.listEventLogs,
            inputKey: \ListEventLogsRequest.nextToken,
            outputKey: \ListEventLogsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listEventLogs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - endTime: The time after which you do not want any events retrieved, in coordinated universal time (UTC) timestamp format as specified in RFC 3339.
    ///   - eventName: The name of the event.
    ///   - maxResults: The maximum number of results to show in a single call to this API. If the number of results is larger than the number you specified, the response will include a NextToken element, which you can use to obtain additional results.
    ///   - spaceName: The name of the space.
    ///   - startTime: The date and time when you want to start retrieving events, in coordinated universal time (UTC) timestamp format as specified in RFC 3339.
    ///   - logger: Logger used for logging
    @inlinable
    public func listEventLogsPaginator(
        endTime: Date,
        eventName: String? = nil,
        maxResults: Int? = nil,
        spaceName: String,
        startTime: Date,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListEventLogsRequest, ListEventLogsResponse> {
        let input = ListEventLogsRequest(
            endTime: endTime, 
            eventName: eventName, 
            maxResults: maxResults, 
            spaceName: spaceName, 
            startTime: startTime
        )
        return self.listEventLogsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listProjects(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listProjectsPaginator(
        _ input: ListProjectsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListProjectsRequest, ListProjectsResponse> {
        return .init(
            input: input,
            command: self.listProjects,
            inputKey: \ListProjectsRequest.nextToken,
            outputKey: \ListProjectsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listProjects(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: Information about filters to apply to narrow the results returned in the list.
    ///   - maxResults: The maximum number of results to show in a single call to this API. If the number of results is larger than the number you specified, the response will include a NextToken element, which you can use to obtain additional results.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger used for logging
    @inlinable
    public func listProjectsPaginator(
        filters: [ProjectListFilter]? = nil,
        maxResults: Int? = nil,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListProjectsRequest, ListProjectsResponse> {
        let input = ListProjectsRequest(
            filters: filters, 
            maxResults: maxResults, 
            spaceName: spaceName
        )
        return self.listProjectsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listSourceRepositories(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listSourceRepositoriesPaginator(
        _ input: ListSourceRepositoriesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListSourceRepositoriesRequest, ListSourceRepositoriesResponse> {
        return .init(
            input: input,
            command: self.listSourceRepositories,
            inputKey: \ListSourceRepositoriesRequest.nextToken,
            outputKey: \ListSourceRepositoriesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listSourceRepositories(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to show in a single call to this API. If the number of results is larger than the number you specified, the response will include a NextToken element, which you can use to obtain additional results.
    ///   - projectName: The name of the project in the space.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger used for logging
    @inlinable
    public func listSourceRepositoriesPaginator(
        maxResults: Int? = nil,
        projectName: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListSourceRepositoriesRequest, ListSourceRepositoriesResponse> {
        let input = ListSourceRepositoriesRequest(
            maxResults: maxResults, 
            projectName: projectName, 
            spaceName: spaceName
        )
        return self.listSourceRepositoriesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listSourceRepositoryBranches(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listSourceRepositoryBranchesPaginator(
        _ input: ListSourceRepositoryBranchesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListSourceRepositoryBranchesRequest, ListSourceRepositoryBranchesResponse> {
        return .init(
            input: input,
            command: self.listSourceRepositoryBranches,
            inputKey: \ListSourceRepositoryBranchesRequest.nextToken,
            outputKey: \ListSourceRepositoryBranchesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listSourceRepositoryBranches(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to show in a single call to this API. If the number of results is larger than the number you specified, the response will include a NextToken element, which you can use to obtain additional results.
    ///   - projectName: The name of the project in the space.
    ///   - sourceRepositoryName: The name of the source repository.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger used for logging
    @inlinable
    public func listSourceRepositoryBranchesPaginator(
        maxResults: Int? = nil,
        projectName: String,
        sourceRepositoryName: String,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListSourceRepositoryBranchesRequest, ListSourceRepositoryBranchesResponse> {
        let input = ListSourceRepositoryBranchesRequest(
            maxResults: maxResults, 
            projectName: projectName, 
            sourceRepositoryName: sourceRepositoryName, 
            spaceName: spaceName
        )
        return self.listSourceRepositoryBranchesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listSpaces(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listSpacesPaginator(
        _ input: ListSpacesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListSpacesRequest, ListSpacesResponse> {
        return .init(
            input: input,
            command: self.listSpaces,
            inputKey: \ListSpacesRequest.nextToken,
            outputKey: \ListSpacesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listSpaces(_:logger:)``.
    ///
    /// - Parameters:
    ///   - logger: Logger used for logging
    @inlinable
    public func listSpacesPaginator(
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListSpacesRequest, ListSpacesResponse> {
        let input = ListSpacesRequest(
        )
        return self.listSpacesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listWorkflowRuns(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listWorkflowRunsPaginator(
        _ input: ListWorkflowRunsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListWorkflowRunsRequest, ListWorkflowRunsResponse> {
        return .init(
            input: input,
            command: self.listWorkflowRuns,
            inputKey: \ListWorkflowRunsRequest.nextToken,
            outputKey: \ListWorkflowRunsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listWorkflowRuns(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to show in a single call to this API. If the number of results is larger than the number you specified, the response will include a NextToken element, which you can use to obtain additional results.
    ///   - projectName: The name of the project in the space.
    ///   - sortBy: Information used to sort the items in the returned list.
    ///   - spaceName: The name of the space.
    ///   - workflowId: The ID of the workflow. To retrieve a list of workflow IDs, use ListWorkflows.
    ///   - logger: Logger used for logging
    @inlinable
    public func listWorkflowRunsPaginator(
        maxResults: Int? = nil,
        projectName: String,
        sortBy: [WorkflowRunSortCriteria]? = nil,
        spaceName: String,
        workflowId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListWorkflowRunsRequest, ListWorkflowRunsResponse> {
        let input = ListWorkflowRunsRequest(
            maxResults: maxResults, 
            projectName: projectName, 
            sortBy: sortBy, 
            spaceName: spaceName, 
            workflowId: workflowId
        )
        return self.listWorkflowRunsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listWorkflows(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listWorkflowsPaginator(
        _ input: ListWorkflowsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListWorkflowsRequest, ListWorkflowsResponse> {
        return .init(
            input: input,
            command: self.listWorkflows,
            inputKey: \ListWorkflowsRequest.nextToken,
            outputKey: \ListWorkflowsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listWorkflows(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to show in a single call to this API. If the number of results is larger than the number you specified, the response will include a NextToken element, which you can use to obtain additional results.
    ///   - projectName: The name of the project in the space.
    ///   - sortBy: Information used to sort the items in the returned list.
    ///   - spaceName: The name of the space.
    ///   - logger: Logger used for logging
    @inlinable
    public func listWorkflowsPaginator(
        maxResults: Int? = nil,
        projectName: String,
        sortBy: [WorkflowSortCriteria]? = nil,
        spaceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListWorkflowsRequest, ListWorkflowsResponse> {
        let input = ListWorkflowsRequest(
            maxResults: maxResults, 
            projectName: projectName, 
            sortBy: sortBy, 
            spaceName: spaceName
        )
        return self.listWorkflowsPaginator(input, logger: logger)
    }
}

extension CodeCatalyst.ListAccessTokensRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CodeCatalyst.ListAccessTokensRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension CodeCatalyst.ListDevEnvironmentSessionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CodeCatalyst.ListDevEnvironmentSessionsRequest {
        return .init(
            devEnvironmentId: self.devEnvironmentId,
            maxResults: self.maxResults,
            nextToken: token,
            projectName: self.projectName,
            spaceName: self.spaceName
        )
    }
}

extension CodeCatalyst.ListDevEnvironmentsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CodeCatalyst.ListDevEnvironmentsRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            projectName: self.projectName,
            spaceName: self.spaceName
        )
    }
}

extension CodeCatalyst.ListEventLogsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CodeCatalyst.ListEventLogsRequest {
        return .init(
            endTime: self.endTime,
            eventName: self.eventName,
            maxResults: self.maxResults,
            nextToken: token,
            spaceName: self.spaceName,
            startTime: self.startTime
        )
    }
}

extension CodeCatalyst.ListProjectsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CodeCatalyst.ListProjectsRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            spaceName: self.spaceName
        )
    }
}

extension CodeCatalyst.ListSourceRepositoriesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CodeCatalyst.ListSourceRepositoriesRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            projectName: self.projectName,
            spaceName: self.spaceName
        )
    }
}

extension CodeCatalyst.ListSourceRepositoryBranchesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CodeCatalyst.ListSourceRepositoryBranchesRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            projectName: self.projectName,
            sourceRepositoryName: self.sourceRepositoryName,
            spaceName: self.spaceName
        )
    }
}

extension CodeCatalyst.ListSpacesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CodeCatalyst.ListSpacesRequest {
        return .init(
            nextToken: token
        )
    }
}

extension CodeCatalyst.ListWorkflowRunsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CodeCatalyst.ListWorkflowRunsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            projectName: self.projectName,
            sortBy: self.sortBy,
            spaceName: self.spaceName,
            workflowId: self.workflowId
        )
    }
}

extension CodeCatalyst.ListWorkflowsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CodeCatalyst.ListWorkflowsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            projectName: self.projectName,
            sortBy: self.sortBy,
            spaceName: self.spaceName
        )
    }
}
